<?php

namespace app\tool\controller;
require_once APP_PATH . '/../extend/qiniusdk/autoload.php';
use Qiniu\Auth as Auth;
use Qiniu\Storage\UploadManager;
use think\Controller;
use think\Db;

class Qiniu extends Controller
{
    /**
     * 图片上传
     * @return String 图片的完整URL
     */
    public function upload()
    {

        $qn_config = Db::name('option')->where('option_name', 'qiniu')->value('option_value');
        $qn_config = json_decode($qn_config, true);
        // 获取表单上传文件 例如上传了001.jpg
        $file = request()->file('file');
        // 移动到框架应用根目录/uploads/ 目录下
        $targetDir = ROOT_PATH . "upload" . DS;
        if (!file_exists($targetDir)) {
            mkdir($targetDir, 0777, true);
        }
        $info = $file->move($targetDir);
        if ($info) {
            // 成功上传后 获取上传信息
            // 输出 jpg
            // echo $info->getExtension();
            // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            // echo $info->getSaveName();
            $key = $info->getSaveName();
            // 输出 42a79759f284b767dfcb2a0197904287.jpg
            $file_name = $info->getFilename();
            $save_name = date('Ymd') . '/' . $file_name;
        } else {
            // 上传失败获取错误信息
            echo $file->getError();
        }

        $auth = new Auth($qn_config['ak'], $qn_config['sk']);

        // 上传文件到七牛后， 七牛将文件名和文件大小回调给业务服务器.
        // 可参考文档: http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
        //         $policy = array(
        //             'callbackUrl' => 'http://your.domain.com/upload_verify_callback.php',
        //             'callbackBody' => 'filename=$(fname)&filesize=$(fsize)'
        //         );
        $uptoken = $auth->uploadToken($qn_config['bk'], null, 3600, null);
        $uploadMgr = new UploadManager();
        list($ret, $err) = $uploadMgr->putFile($uptoken, $save_name, $targetDir . $key);
        if ($err !== null) {
            $this->error('error', '', $err);
        } else {
            // var_dump($ret);
            $this->success('ok', '', ['url' => $qn_config['domain'] . '/' . $ret['key'], 'pic' => $ret['key']]);
        }


    }


    /**
     *
     * {
     * // errno 即错误代码，0 表示没有错误。
     * //       如果有错误，errno != 0，可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
     * "errno": 0,
     *
     * // data 是一个数组，返回若干图片的线上地址
     * "data": [
     * "图片1地址",
     * "图片2地址",
     * "……"
     * ]
     * }
     *
     *
     * 图片上传
     * @return String 图片的完整URL
     */
    public function wang_uptoken()
    {

        $qn_config = Db::name('option')->where('option_name', 'qiniu')->value('option_value');
        $qn_config = json_decode($qn_config, true);

        $auth = new Auth($qn_config['ak'], $qn_config['sk']);

        // 上传文件到七牛后， 七牛将文件名和文件大小回调给业务服务器.
        // 可参考文档: http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
        //         $policy = array(
        //             'callbackUrl' => 'http://your.domain.com/upload_verify_callback.php',
        //             'callbackBody' => 'filename=$(fname)&filesize=$(fsize)'
        //         );
        $uptoken = $auth->uploadToken($qn_config['bk'], null, 3600, null);

        return json(['uptoken' => $uptoken]);


    }

    public function get_config()
    {
        $qn_config = Db::name('option')->where('option_name', 'qiniu')->value('option_value');
        $qn_config = json_decode($qn_config, true);
        return json(['domain' => $qn_config['domain']]);
    }


}
